<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>Ap&eacute;ndice C. Listados Jasper en gvHIDRA</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="Apendices.html" title="Parte&nbsp;V.&nbsp;Apendices">
      <link rel="prev" href="apb.html" title="Ap&eacute;ndice B. Pluggins, que son y como usarlos en mi aplicaci&oacute;n">
      <link rel="next" href="apcs02.html" title="C.2. Depuraci&oacute;n de errores al intentar ejecutar informes JasperReports en gvHidra">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">Ap&eacute;ndice C. Listados Jasper en gvHIDRA</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="apb.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Parte&nbsp;V.&nbsp;Apendices</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="apcs02.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="appendix" title="Ap&eacute;ndice C. Listados Jasper en gvHIDRA">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title"><a name="d4e8447"></a>Ap&eacute;ndice C. Listados Jasper en gvHIDRA
                  </h2>
               </div>
            </div>
         </div>
         <div class="toc">
            <p><b>Tabla de contenidos</b></p>
            <dl>
               <dt><span class="section"><a href="apc.html#d4e8449">C.1. Integracion de Jasper en un mantenimiento</a></span></dt>
               <dt><span class="section"><a href="apcs02.html">C.2. Depuraci&oacute;n de errores al intentar ejecutar informes JasperReports en gvHidra</a></span></dt>
               <dt><span class="section"><a href="apcs03.html">C.3. Recomendaciones y generalidades sobre integraci&oacute;n gvHidra y Jasper</a></span></dt>
            </dl>
         </div>
           
         
           
         <div class="section" title="C.1. Integracion de Jasper en un mantenimiento">
            <div class="titlepage">
               <div>
                  <div>
                     <h2 class="title" style="clear: both"><a name="d4e8449"></a>C.1. Integracion de Jasper en un mantenimiento
                     </h2>
                  </div>
               </div>
            </div>
                
            
                
            <p>La manera de integrar un informe Jasper dentro de una aplicaci&oacute;n
                   gvHIDRA es similar a la que se utiliza para integrar otros informes
                   (listadosOO, informesOD, listadosXML), o incluso m&aacute;s sencilla, puesto que
                   la fuente de datos del informe se gestiona de forma interna (la consulta
                   sql est&aacute; embebida en el informe).
            </p>
            
                
            <p>Supongamos que trabajamos en un proyecto que necesita nuestro
                   proyecto se llama &#8220;pruebas-igep&#8221;, detallemos poco a poco los pasos a
                   seguir:
            </p>
            
                
            <div class="orderedlist">
               <ol class="orderedlist" type="1">
                  <li class="listitem">
                             
                     <p>Importar el proyecto Jasper. Para ello, el directorio &#8220;include&#8221;
                                de nuestro proyecto, tendr&aacute; en su interior un directorio &#8220;jasper&#8221;. En
                                dicho directorio, podremos encontrar tres subdirectorios
                                b&aacute;sicos:
                     </p>
                     
                             
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="disc">
                           <li class="listitem">
                                          
                              <p>Directorio &#8220;ejemplos&#8221;: Distintos ejemplos
                                             disponibles.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>Directorio &#8220;jars&#8221;: Clases Java que realizan la invocaci&oacute;n
                                             del informe y la comunicaci&oacute;n con las clases PHP.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>Directorio &#8220;modulosPHP&#8221;: Clases PHP que se ofrecen al
                                             usuario (programador), encargadas de preparar la
                                             invocaci&oacute;n.
                              </p>
                                        
                           </li>
                        </ul>
                     </div>
                     
                             
                     <p>Es importante que incluiyamos en el fichero .cvsignore del
                                proyecto una l&iacute;nea con la palabar "jasper" para evitar que el proyecto
                                jasper se incorpore a la versi&oacute;n del CVS de su proyecto.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p>Crear en el ra&iacute;z de nuestro proyecto el directorio
                                &#8220;plantillasJasper&#8221;, donde dejaremos los ficheros &#8220;.jasper&#8221; que vayamos
                                compilando con el iReport (los informes compilados). Durante el
                                desarrollo del proyecto, podemos colocar los ficheros "fuente" de los
                                informes (extensi&oacute;n &#8220;.jrxml&#8221;) bien, en el mismo directorio o bien en
                                un subdirectorio llamado "fuentes". Dichos ficheros son ficheros XML
                                editables con el iReport. Es MUY IMPORTANTE no incluir dichos ficheros
                                (los de extensi&oacute;n &#8220;.jrxml&#8221;) en la versi&oacute;n de produccion de la
                                aplicaci&oacute;n, dado que aparecen datos de conexi&oacute;n en su interior
                                (usuario y contrase&ntilde;a de acceso a BD) en texto plano. Por lo tanto,
                                cuando el responsable de una aplicaci&oacute;n realice el despliegue o
                                instalaci&oacute;n de la misma en producci&oacute;n, deber&iacute;a eliminar los ficheros
                                .jrxml&#8221; del directorio "plantillasJasper". La figura siguiente muestra
                                la jerarqu&iacute;a de directorios de la que hemos hablado:
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p>Copiar el fichero compilado (fichero de extensi&oacute;n &#8220;.jasper&#8221;) del
                                informe dentro del directorio &#8220;plantillasJasper&#8221;.
                     </p>
                           
                  </li>
                  <li class="listitem">
                             
                     <p>Crear un mantenimiento de gvHIDRA siguiendo el patr&oacute;n P1M1(FIL).
                                Una vez creada la ventana, tenemos que incorporar en ella una accion
                                particular para que el listado se lance. En nuestro ejemplo
                                abrirListado.
                     </p>
                     
                             
                     <div class="informalexample">
                                  <pre class="programlisting">
1:&lt;?php
2:
3:require_once('include/jasper/modulosPHP/informeJasper.php');
&middot;&middot;&middot;SIGUE&middot;&middot;&middot;
7:class claseDemo extends gvHidraForm
8:{
9:
10:  var $infJasper_demo;
&middot;&middot;&middot;SIGUE&middot;&middot;&middot;
27: function accionesParticulares($str_accion, $objDatos)
28: {
29:    $objDatos-&gt;setOperacion('external'); 
30:    $informeJ = new InformeJasper('DemoFacturas');
31:    $informeJ-&gt;setDataSourceType('sgbd');
32:    $conf = ConfigFramework::getConfig();
33:	 $g_dsn = $conf-&gt;getDSN('g_dsn');
34:    $informeJ-&gt;importPearDSN($g_dsn); 
35:    //Si la conexi&oacute;n es distinta podemos especificarlo, por ejemplo:
36:    /*
37:     $informeJ-&gt;setDBType('pgsql'); $informeJ-&gt;setDBHost('localhost');
38:     $informeJ-&gt;setDBPort('5432'); $informeJ-&gt;setDBDatabase('marte'); 
39:     $informeJ-&gt;setDBUser('prueba'); $informeJ-&gt;setDBPassword('foo');
40:    */
41:    $informeJ-&gt;setJasperFile('./plantillasJasper/DemoFacturas.jasper'); 
42:    //Comprobamos los par&aacute;metros del informe y los pasamos...
43:    if ($objDatos-&gt;getValue('anyo')!='')
44:    {
45:        $informeJ-&gt;addParam('Anyo', $objDatos-&gt;getValue('anyo'), 'String');
46:    }
&middot;&middot;&middot; Comprobaci&oacute;n del resto de par&aacute;metros &middot;&middot;&middot;
61:    $this-&gt;infJasper_demo = &amp; $informeJ;
62:    $actionForward = $objDatos-&gt;getForward('mostrarListado');
63:    $this-&gt;openWindow($actionForward);
64:    $this-&gt;showMensaje('APL-10');
65:    $actionForward = $objDatos-&gt;getForward('correcto');
66:    return $actionForward;
67: }//Fin accionesParticulares 
&middot;&middot;&middot;SIGUE&middot;&middot;&middot;
123:}//Fin 
124:?&gt;
	</pre>
                                </div>
                     
                             
                     <p>Del c&oacute;digo anterior debemos destacar:</p>
                     
                             
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="disc">
                           <li class="listitem">
                                          
                              <p>L&iacute;nea 10: Declaramos un atributo de la clase que ser&aacute; una
                                             referencia al informe Jasper. Se crea como atributo de la clase,
                                             porque es la manera m&aacute;s sencilla de hacerlo accesible a la
                                             vista.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>L&iacute;neas 30-&shy;34: Declaramos un nuevo informe, de tipo SGBD
                                             (acceso a BD relacional) e importamos los par&aacute;metros de conexi&oacute;n
                                             que necesita desde la conexi&oacute;n PEAR activa. Si el informe se
                                             conectase a una BD distinta, podr&iacute;amos especificarla tambi&eacute;n
                                             usando las funciones que hay comentadas en las l&iacute;neas
                                             35-39.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>L&iacute;nea 41: Declaramos el nombre del fichero compilado
                                             (fichero de extensi&oacute;n &#8220;.jasper&#8221;) que hemos colocado dentro del
                                             directorio &#8220;plantillasJasper&#8221; que queremos que se abra.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>Lineas 43-46: Si el informe jasper tiene par&aacute;metros de
                                             entrada, en esta l&iacute;nea vemos c&oacute;mo podemos dar valor a uno de los
                                             par&aacute;metros que espera el informe jasper. Los par&aacute;metros de la
                                             funci&oacute;n son:
                              </p>
                              
                                          
                              <div class="itemizedlist">
                                 <ul class="itemizedlist" type="circle">
                                    <li class="listitem">
                                                       
                                       <p>Nombre del par&aacute;metro: deber&aacute; coincidir con el nombre que
                                                          hemos dado de alta en iReports
                                       </p>
                                                     
                                    </li>
                                    <li class="listitem">
                                                       
                                       <p>Valor del par&aacute;metro: enviaremos el valor (ojo con tipos
                                                          complejos, como las fechas, eque en PHP son objetos).
                                       </p>
                                                     
                                    </li>
                                    <li class="listitem">
                                                       
                                       <p>Valor del par&aacute;metro: enviaremos el valor (ojo con tipos
                                                          complejos, como las fechas, eque en PHP son objetos).
                                       </p>
                                                     
                                    </li>
                                    <li class="listitem">
                                                       
                                       <p>Tipo de Datos: En general, debe coincidir con el tipo
                                                          que hemos definido para el par&aacute;metro dentro del informe
                                                          iReport (tipos Java). Puede ser: Date, Time, String, Boolean,
                                                          Int, Long, Double. Auqnue podemos apoyarnos en la potencia de
                                                          las expresiones de iReport/jasperreport para "forzar" un tipo.
                                                          En el apartado de Recomendaciones y generalidades sobre
                                                          integraci&oacute;n gvHidra y Jasper podemos encontrar m&aacute;s informaci&oacute;n
                                                          al respecto.
                                       </p>
                                                     
                                    </li>
                                 </ul>
                              </div>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>L&iacute;nea 61: Guardamos la referencia al objeto en un atributo
                                             de la clase manejadora para poder acceder al mismo en la
                                             vista.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>L&iacute;neas 62-66: obtenemos un forward para el listado (una
                                             views que ahora luego veremos) y lo abrimos en una ventana nueva
                                             (m&eacute;todo openWindow). Finalmente devolvemos el forward normal de la
                                             acci&oacute;n particular mostrando un mensaje en pantalla.
                              </p>
                                        
                           </li>
                        </ul>
                     </div>
                     
                             
                     <p>De las &uacute;ltimas l&iacute;neas comentadas anteriormente, deducimos que el
                                fichero mappings.php debe contener el siguiente c&oacute;digo:
                     </p>
                     
                             
                     <div class="informalexample">
                                  <pre class="programlisting">
	...
	$this-&gt;_AddMapping('claseDemo__iniciarVentana', 'TinvListFacturaJasper');
	$this-&gt;_AddForward('claseDemo__iniciarVentana', 'gvHidraSuccess', 'index.php?view=views/listados/p_demoJasper.php');
	$this-&gt;_AddForward('claseDemo__iniciarVentana', 'gvHidraError', 'index.php?view=igep/views/aplicacion.php');
	
	$this-&gt;_AddMapping('claseDemo__abrirListado', 'TinvListFacturaJasper');
	$this-&gt;_AddForward('claseDemo__abrirListado', 'correcto', 'index.php?view=views/listados/p_demoJasper.php');
	$this-&gt;_AddForward('claseDemo__abrirListado', 'mostrarListado', 'index.php?view=views/listados/l_demoJasper.php');
	...
			</pre>
                                </div>
                     
                             
                     <p>Continuemos ahora con el &uacute;ltimo paso, la vista. Para integrar el
                                listado generado con la ventana, hemos utilizado una llamada al
                                forward mostrarListadoEn nuestro ejemplo l_facturaJasper.php
                     </p>
                     
                             
                     <div class="informalexample">
                                  <pre class="programlisting">

1: &lt;?php 
1: require_once('include/jasper/modulosPHP/informeJasper.php'); 
2: 
3: 
4:    if (IgepSession::existeVariable("claseDemo","infJasper_demo"))
9:    {
10:     $informeJ = &amp; IgepSession::dameVariable("claseDemo","infJasper_demo");
11:     $informeJ-&gt;createResultFile('pdf');
12:   } 
13:   IgepSession::borraVariable("claseDemo","lanzarInforme");
14:
15:
&middot;&middot;&middot;SIGUE&middot;&middot;&middot;
</pre>
                                </div>
                     
                             
                     <p>Del c&oacute;digo anterior destacan:</p>
                     
                             
                     <div class="itemizedlist">
                        <ul class="itemizedlist" type="disc">
                           <li class="listitem">
                                          
                              <p>Linea 10: Recuperamos el atributo que referencia al listado
                                             de la sesi&oacute;n.
                              </p>
                                        
                           </li>
                           <li class="listitem">
                                          
                              <p>Linea 11: Invocamos la creaci&oacute;n del informe.</p>
                                        
                           </li>
                        </ul>
                     </div>
                           
                  </li>
               </ol>
            </div>
              
         </div>
           
           
           
           
           
         
         
           
           
         
         
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="apb.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="Apendices.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="apcs02.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">Ap&eacute;ndice B. Pluggins, que son y como usarlos en mi aplicaci&oacute;n&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;C.2. Depuraci&oacute;n de errores al intentar ejecutar informes JasperReports en gvHidra</td>
            </tr>
         </table>
      </div>
   </body>
</html>